package cn.school.demo.util

import com.blankj.utilcode.util.RegexUtils

/**
 * 字符串工具类
 * 主要功能：
 * 1.验证手机号是否合法
 * 2.验证姓名是否合法
 * 3.验证密码是否合法
 * 4.验证学号是否合法
 * 5.验证工号是否合法
 * 6.是否是日期：yyyy-MM-dd格式
 * 7.验证验证码是否合法
 * */
class StringUtil {
    companion object {
        /**
         * 判断字符串是否符合手机号码格式
         * 移动号段: 134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,184,187,188,191,198.199
         * 联通号段: 130,131,132,145,155,156,170,171,175,176,185,186
         * 电信号段: 133,149,153,170,173,177,180,181,189
         * @Param mobilePhoneNumber 待检验的手机号字符串
         * */
        fun isMobilePhone(mobilePhoneNumber: String): Boolean {
            return RegexUtils.isMobileSimple(mobilePhoneNumber)
        }

        /**
         * 验证姓名是否合法
         * 1.只能是纯中文或纯英文
         * 2.2<=中文字数<=4
         * 3.英文允许有空格和.
         * @Param name 待检验的姓名字符串
         * */
        fun isName(name: String): Boolean {
            val nameRegex = "^([\u4e00-\u9fa5]{2,20}|[a-zA-Z.\\s]{2,20})$".toRegex()
            return nameRegex.containsMatchIn(name)
        }

        /**
         * 验证密码是否合法
         * 包含字母、数字和一位特殊字符的6-18位密码
         * @Param pwd 待检验的密码字符串
         * */
        fun isPassword(pwd: String): Boolean {
            val pwdRegex = "^(?!(?:[^a-zA-Z]|\\D|[a-zA-Z0-9])\$).{6,18}\$".toRegex()
            return pwdRegex.containsMatchIn(pwd)
        }

        /**
         * 验证学号是否合法
         * 只能检测9-10位数字之间
         * @Param studentID 待检验的学号字符串
         * */
        fun isStudentID(Id: String): Boolean {
            val studentIdRegex = "^\\d{9,10}$".toRegex()
            return studentIdRegex.containsMatchIn(Id)
        }

        /**
         * 检验日期是否为yyyy-MM-dd格式
         * @Param date 待检验的日期字符串
         * */
        fun isDate(date: String): Boolean {
            return RegexUtils.isDate(date)
        }

        /**
         * 验证验证码是否合法
         * @param code 待验证的验证码
         * */
        fun isCode(code: String): Boolean {
            val studentIdRegex = "^\\d{4,6}$".toRegex()
            return studentIdRegex.containsMatchIn(code)
        }
    }
}